/**
 * @author: li_jian
 * @version: 1.0
 * @date: 2020/7/5 20:57
 * @description： @link{https://www.nowcoder.com/practice/623a5ac0ea5b4e5f95552655361ae0a8?tpId=13&&tqId=11203&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking}
 */
public class JZ50_数组中重复的数字 {

    /**
     * 找出重复的数字
     *
     * @param nums        给定数组
     * @param length      长度
     * @param duplication 放重复数字的数组
     * @return
     */
    public boolean duplicate(int nums[], int length, int[] duplication) {

        if (nums == null || length <= 0)
            return false;

        for (int i = 0; i < length; i++) {
            while (nums[i] != i) {
                if (nums[i] == nums[nums[i]]) {
                    duplication[0] = nums[i];
                    return true;
                }
                swap(nums, i, nums[i]);
            }
        }
        return false;
    }


    /**
     * 交换i和j位置上的数
     *
     * @param arr
     * @param i
     * @param j
     */
    public void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}
